package com.itheima.reggie.controller;

import com.itheima.reggie.common.SystemException;
import com.itheima.reggie.common.Result;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author：wsm
 * @Date：2021/11/26/18:12
 * @Description：用来处理图片上传下载的控制器
 */
@RequestMapping("/common")
@RestController
public class Commonimg {
    @Value("${reggie.path}")
    private String imgPath;
/***
*@Description：这个是图片的上传控制器
*@Param：
*@return：
*@Author：lsp
*@Date：
*/
    @PostMapping("/upload")
    public Result upload(@RequestParam MultipartFile file) {
        //把图片的后缀名截取下来,给图片一个新名字
        String oldFileName = file.getOriginalFilename();
        String nameSuffix = oldFileName.substring(oldFileName.lastIndexOf("."));
        //用工具类给图片命名,以免重复图片名,覆盖文件
        String newFileName = UUID.randomUUID().toString() + nameSuffix;
        //判断存放图片的目录存不存在
        File fileStorage = new File(imgPath);
        //判断该路径是否存在,如果不存在就创建
        if (!fileStorage.exists()) {
            fileStorage.mkdirs();
        }
        //将图片永久储存在本地
        try {
            file.transferTo(new File(imgPath+newFileName));
        } catch (IOException e) {
            throw new SystemException("文件上传失败");
        }
        return Result.success(newFileName);
    }


    /***
    *@Description：图片下载的控制器
    *@Param：
    *@return：
    *@Author：lsp
    *@Date：
    */
    @GetMapping("/download")
    public void  downLoad(String name, HttpServletResponse response)  {
        //组装图片的访问路径
        String pathFile=imgPath+name;
        //使用FileUtils里面的工具类把文件转换成字节数组
        try {
            byte[] imgByets = FileCopyUtils.copyToByteArray(new File(pathFile));
            //把字节数组写回页面
            response.getOutputStream().write(imgByets);
        } catch (IOException e) {
           throw  new SystemException("图片读取失败");
        }

    }
    
}